package com.woniu.utils;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 通用API响应结果封装类
 * @param <T> 数据类型
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    private Integer code; // 状态码，例如 200 成功，400 失败
    private String msg;   // 消息
    private T data;       // 返回的数据

    // 成功响应的静态方法
    public static <T> Result<T> success(T data) {
        return new Result<>(200, "操作成功", data);
    }

    public static <T> Result<T> success(String msg) {
        return new Result<>(200, msg, null);
    }

    public static <T> Result<T> success(String msg, T data) {
        return new Result<>(200, msg, data);
    }

    // 失败响应的静态方法
    public static <T> Result<T> fail(String msg) {
        return new Result<>(400, msg, null);
    }

    public static <T> Result<T> error(Integer code, String msg) {
        return new Result<>(code, msg, null);
    }

    public static <T> Result<T> error(String msg) {
        return new Result<>(500, msg, null); // 默认使用 500 状态码
    }

    public static <T> T checkAndGetData(Result<T> result) {
        if (result != null && result.getCode() == 200) {
            return result.getData();
        } else {
            throw new RuntimeException(result != null ? result.getMsg() : "未知错误");
        }
    }
}
